<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //创建一个构造函数
        function Person(name,age,sex) {
            this.name=name;
            this.age=age;
            this.sex=sex;
        }
        //为构造函数创建方法
        Person.prototype.run=function(){
            console.log("跑路很快");
        }
        //声明一个自己的new，第一参数为需要改变的this指向的对象
        function myNew(fn,...args) {
            //创建一个空对象
            const obj={}
            //将fn的this指向这个空对象
            const re =fn.apply(obj,args)
            //将构造函数的显式原型等于对象的隐式原型
            obj.__proto__=fn.prototype
            //判断潘辉的实例的数据类型
            if (typeof re==="object"&&re!==null||typeof re==='function') {
                return re
            }
            //基础数据类型直接return
            return obj
        }
        const ming=myNew(Person,"明",17,"男")
        console.log(ming);
    </script>
</body>
</html>